﻿using System;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.ConstrainedExecution;
using System.Runtime.InteropServices;
using System.Security;

namespace HandyControl.Tools.Interop;

[SuppressMessage("ReSharper", "UnusedMember.Local")]
internal sealed class BitmapHandle : WpfSafeHandle
{
    [SecurityCritical]
    private BitmapHandle() : this(true)
    {
        //请不要删除此构造函数，否则当使用自定义ico文件时会报错
    }

    [SecurityCritical]
    private BitmapHandle(bool ownsHandle) : base(ownsHandle, CommonHandles.GDI)
    {
    }

    [SecurityCritical]
    [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
    protected override bool ReleaseHandle()
    {
        return InteropMethods.DeleteObject(handle);
    }

    [SecurityCritical]
    internal HandleRef MakeHandleRef(object obj)
    {
        return new(obj, handle);
    }

    [SecurityCritical]
    internal static BitmapHandle CreateFromHandle(IntPtr hbitmap, bool ownsHandle = true)
    {
        return new(ownsHandle)
        {
            handle = hbitmap,
        };
    }
}
